package com.ruge.util;

import javax.mail.Session;
import javax.mail.Transport;
import java.util.*;

public class TextUtil {

    /**
     * 将List<Map>转换为Markdown表格
     */
    public static String convertToMarkdownTable(List<Map<String, Object>> data) {
        if (data == null || data.isEmpty()) {
            return "无数据";
        }

        Map<String, Object> firstRow = data.get(0);
        List<String> headers = new ArrayList<>(firstRow.keySet());
        StringBuilder sb = new StringBuilder();

        // 表头
        for (String header : headers) {
            sb.append("| ").append(header).append(" ");
        }
        sb.append("|").append(System.lineSeparator());

        // 分隔线（Markdown表格必需）
        for (String header : headers) {
            sb.append("| --- ");
        }
        sb.append("|").append(System.lineSeparator());

        // 内容行
        for (Map<String, Object> row : data) {
            for (Object value : row.values()) {
                String valStr = value != null ? value.toString() : "";
                sb.append("| ").append(valStr).append(" ");
            }
            sb.append("|").append(System.lineSeparator());
        }

        return sb.toString();
    }


    /**
     * 将List<Map>转换为HTML列表（支持有序/无序）
     */
    public static String convertToList(List<Map<String, Object>> data, boolean ordered) {
        if (data == null || data.isEmpty()) {
            return "<p>无数据</p>";
        }

        StringBuilder sb = new StringBuilder();
        String listTag = ordered ? "ol" : "ul";
        sb.append("<").append(listTag).append(" style='padding-left: 20px;'>");

        for (Map<String, Object> row : data) {
            sb.append("<li style='margin: 8px 0;'>");
            // 每条数据内部用键值对展示
            for (Map.Entry<String, Object> entry : row.entrySet()) {
                sb.append("<strong>").append(entry.getKey()).append(":</strong> ")
                        .append(entry.getValue() != null ? entry.getValue() : "")
                        .append("; ");
            }
            sb.setLength(sb.length() - 2); // 移除最后一个分号和空格
            sb.append("</li>");
        }

        sb.append("</").append(listTag).append(">");
        return sb.toString();
    }


    public static String convertToHtmlTable(List<Map<String, Object>> data) {
        if (data == null || data.isEmpty()) {
            return "<table border='1'><tr><td>No data available</td></tr></table>";
        }

        StringBuilder html = new StringBuilder();
        html.append("<table border='1' style='border-collapse: collapse; width: 100%;'>\n");

        // 表头
        html.append("<tr style='background-color: #f2f2f2;'>\n");
        Set<String> headers = data.get(0).keySet();
        for (String header : headers) {
            html.append("<th style='padding: 8px; text-align: left;'>")
                    .append(escapeHtml(header))
                    .append("</th>\n");
        }
        html.append("</tr>\n");

        // 表格数据
        for (Map<String, Object> row : data) {
            html.append("<tr>\n");
            for (String header : headers) {
                Object value = row.get(header);
                html.append("<td style='padding: 8px; border: 1px solid #ddd;'>")
                        .append(escapeHtml(value != null ? value.toString() : ""))
                        .append("</td>\n");
            }
            html.append("</tr>\n");
        }

        html.append("</table>");
        return html.toString();
    }

    private static String escapeHtml(String text) {
        if (text == null) return "";
        return text.replace("&", "&amp;")
                .replace("<", "&lt;")
                .replace(">", "&gt;")
                .replace("\"", "&quot;")
                .replace("'", "&#39;");
    }

    /**
     * 将List<Map>转换为CSV字符串（用于附件）
     */
    public static String convertToCsv(List<Map<String, Object>> data) {
        if (data == null || data.isEmpty()) {
            return "";
        }

        Map<String, Object> firstRow = data.get(0);
        List<String> headers = new ArrayList<>(firstRow.keySet());
        StringBuilder sb = new StringBuilder();

        // 表头（CSV用逗号分隔）
        sb.append(String.join(",", headers)).append(System.lineSeparator());

        // 内容行（处理逗号和引号转义）
        for (Map<String, Object> row : data) {
            List<String> values = new ArrayList<>();
            for (Object value : row.values()) {
                String valStr = value != null ? value.toString() : "";
                // 包含逗号或引号时需要用双引号包裹
                if (valStr.contains(",") || valStr.contains("\"")) {
                    valStr = "\"" + valStr.replace("\"", "\"\"") + "\"";
                }
                values.add(valStr);
            }
            sb.append(String.join(",", values)).append(System.lineSeparator());
        }

        return sb.toString();
    }
}
